Spring Framework の IoC コンテナ
以下のパッケージが Spring Framework の IoC コンテナの基礎
org.springframework.beans パッケージ
org.springframework.context パッケージ
BeanFactory インターフェイスが進歩的な設定機構を提供 (基本機能)
ApplicationContext は BeanFactory のサブインターフェイス (エンタープライズ向け機能を追加)
Bean とは?
アプリケーションの背骨を形作る
インジェクションの種類
セッターインジェクション
コンストラクタインジェクション
フィールドインジェクション
オートワイヤリング
2 種類
型による解決 : @Autowired
名前による解決
コンポーネントスキャン : 特定のアノテーションがついたクラスが DI コンテナに登録される
Java Config の場合は @ComponentScan アノテーション
コンポーネントスキャンの対象クラスをフィルタで明示できる
DI コンテナを利用するメリットのひとつは、Bean の生存期間 (スコープ) の管理を任せられること @LookUp アノテーションでルックアップインジェクションが可能
nobuoka.icon インジェクション先のスコープに縛られずにインスタンスを取得する場合に使用できると本書では書かれているが、その場合は Factory クラスをつくるとかした方が良い気がするな?
Scoped Proxy というのもある
Post Construct や Pre Destroy といった拡張ポイントがある
IoC コンテナで管理されるオブジェクトを Bean という
依存オブジェクトの注入
1. DI の対象クラスを探す
Spring の起動時に DI の対象となるクラスを探す (コンポーネントスキャン) 特定のアノテーションがついたクラスを探す
2. @Autowired アノテーションがついている箇所にインスタンスを注入
インスタンスのライフサイクル管理
インスタンスの生成と破棄
スコープをアノテーションで指定できる
デフォルトではシングルトン
以下のものが登録される
特定のアノテーションが付けられたクラス
JavaConfig での実装